함수 타입
함수 매개변수
function sing(song: string) {
console.log('Singing: ${song}');
}
- 명시적 타입 정보가 선언되지 않으면 절대 타입을 알 수 없으며 any로 간주한다.
필수 매개변수
function singTwo(first: string, second: string) {
console.log('${first} / ${second}');
}
singTwo('Ball', 'Chain'); // ok
singTwo('Ball'); // error
singTwo('Ball', 10); // error
singTwo('Ball', 'Chain', 'Dream'); // error
- 타입이 맞지 않으면 타입 오류가 발생한다.
- 파라미터가 적거나 더 많으면 에러를 발생한다.
선택적 매개변수
function announceSong(song: string, singer?: string) {
console.log(`Song: ${song}`);
if (singer) {
console.log('Singer: ${singer}');
}
}
announceSong('whatever'); // ok
announceSong('whatever', 'Oasis'); // ok
- singer 파라미터는
?을 통해 필수가 아닌 선택 사항으로 변한다. - singer는 string이나 undefined일 수 있다.
기본 매개변수
function rateSong(song: string, rating?: number = 0) {}
- 자바스크립트와 같이 선택적 매개변수를 선언할 때 기본값을 설정할 수 있다.
- 암묵적으로 함수 내부에
|유니언 타입이 추가 된다.
나머지 매개변수
function singAllTheSongs(singer: string, ...songs: string[]) {
for (const song of songs) {
console.log(`${song}, by ${singer}`);
}
}
- 스프레드 연산자를 통해 임의의 수를 호출 가능하다.
명시적 반환 타입
function singSongRecursive(songs: string[], count = 0): number {}
- 파라미터가 닫히는 부분의 뒤에 반환되는 타입을 명시할 수 있다.
info
함수에서 반환 타입을 명시적으로 선언하면 좋은 이유
- 가능한 반환값이 많은 함수가 항상 동일한 타입의 값을 반환하도록 강제한다.
- 타입스크립트는 재귀 함수의 반환 타입을 통해 타입을 유추하는 것을 거부한다.
- 매우 큰 프로젝트에서 타입스크립트 타입 검사 속도를 높일 수 있다.